DevOps
CICD
K8s
Docker
大家好!歡迎大家來到【從題目中學習k8s】這個小學堂,這個主題主要是想介紹CICD流程中非常火紅的Container管理工具 - kubernetes,簡稱K8s (∵k ~ s中間剛好8個字母)。k8s有兩個相當重要的證照考試:CKA和CKAD。而筆者最近剛好在準備這個考試。因此想藉由這30天,介紹一些CKA
考試中常見的考題,筆者和大家一起腦力激盪,藉由考題用到的觀念,講解一下背後的原理和其他延伸應用,一方面幫助自己複習考題;一方面也可以和大家討論,教學相長,互相學習。由於筆者目前還只是個研究生,還在學習的階段,也還沒有大型的K8s
開發經驗,都只是一些小型的應用,也許涵蓋的範圍不是很廣,當中也可能有些疏漏,再請各位先進不吝指教,有任何想法或建議都可以提出互相討論唷~
首先不免俗的會介紹一下k8s
,包含介紹環境如何建置還有k8s
中基本的觀念,之後藉由帶入題目將介紹過的觀念串聯起來應用,會對k8s
整體更加了解。可能的話也可以介紹一些經常搭配k8s
使用的工具,大部分我也沒用過,剛好可藉由這個機會順便學習。規劃如下:
【Day1~Day8】K8s
基本介紹及環境建置
【Day9~Day25】一天一道題目,藉由考題帶入K8s
觀念
【Day26~Day29】K8s
常用工具&套件
【Day30】30天學習總結
Source: https://codingcompiler.com/wp-content/uploads/2018/01/kubernetes-tutorials.png
K8s是 kubernetes 的簡稱 (∵K ~ s中間剛好8個字母)。在DevOps
開發環節中,最重要的部分即為CI/CD
(Continuous Integration/Continuous Deployment,持續整合/持續佈署)。什麼是 CICD
CI 最主要的目的是讓團隊中的開發人員完成各自的工作後,在每一次的 Commit & Push,都能夠於相同環境自動 Build 程式,以避免每個開發人員因本機的環境&套件版本不相同,造成 Service 異常。(CI
其實還包含測試,但不是我們的重點,就先略過~)
CD 是CI
的延伸,將整合後的程式佈署道實際環境中,並確保可以最快速的方式向客戶發布新的更改也會透過監控系統進行服務存活檢查,若服務異常時會即時發送通知告至開發人員。而K8s
即是屬於CD
中的一環。K8s
的目的只有一個,那就是
自動化地以容器的形式管理你的應用程式
To host your application in the form of containers in a automated fashion
CICD流程圖
Source: https://www.fiverr.com/akilasenarath/do-devops-middleware-k8s-cicd-pipelines-related-work
那麼K8s
到底可以幫我們完成甚麼事呢?
K8s
可以使用DNS或其自己的IP位址將 container expose給外部使用者。若某個container的負載很高,K8s
可以實現負載平衡並分配網絡流量,從而使部署穩定。K8s
允許自動掛載你選擇的儲存系統,例如本地儲存,公有雲提供商等(e.g., GCP, Azure)。K8s
描述已部署container的所需狀態,它可將"可受控資源"從實際狀態更改為所需狀態。例如,你可以自動化K8s
來創建新container,刪除現有container並將其所有資源用於新container。K8s
提供了一個節點集群,可用於運行容器化任務(containerized applications)。告訴K8s
每個容器需要多少CPU和RAM。K8s
可以將容器安裝到節點上,以充分利用資源。K8s
重新啟動發生故障的容器,替換容器,殺死不回應request的容器。K8s
允許儲存和管理敏感訊息,例如密碼,OAuth token和SSH keys。可以部署和更新Secret (之後會介紹) 和Application的配置,而無需重建container images,也無需在stack configuration中公開機密。你可能會想,為甚麼要用K8s
,直接使用Docker
不行嗎?我每次寫完Dockerfile
還要在寫一個YAML把image包成一個Pod
,好像很麻煩?
的確,如果你的應用或服務是一次性的,不需要維護,而且基本的Docker
就能完成所有工作,那我會建議用Docker
就好,畢竟K8s
還是有很多沒碰過的地雷區,可以避免不必要的麻煩。但K8s
強大的地方就在於,他有很多只憑Docker
無法辦到的事情,例如:
K8s
能連結兩個世界,這是整合開發和維運的關鍵技術,K8s
已經是現在的主流技術。K8s
可以將龐大的專案拆成幾個不同面向的小專案,開發效率能被提高,各個服務之間也可獨立部署,不因一個服務癱瘓而癱瘓整個系統,各團隊可以依照自己的需求使用適合自己的開發環境,每個服務也可以依照自己的需求,選擇在不同機器上部署。K8s
最初的設計目標就是讓使用者的應用執行在Google自家的公有雲GCE中,華為雲(CCE)、阿里雲(ACK)和騰訊雲(TKE)也先後宣布支援K8s集群。未來也會有更多公有/私有雲支援K8s
。在K8s
中完全隱藏了底層網路的細節,以Service
為基礎的虛擬IP位址(Cluster IP)的設計讓架構與底層硬體拓樸無關,因此無須改變設定檔,即可輕易將現有環境從實體機無縫遷移到公有雲上。K8s
是一套高成熟度的開源軟體系統,用於管理容器化的工作或服務,由 Google 於 2014 年對外發佈。Docker
和Kubernetes
運作在不同的層次上。Docker
提供應用的容器封裝機制,而 K8s
則控制著 Docker
的生命周期。透過 K8s
可以幫助 Docker
的應用容器依據資源或規則分配容器到合適的結點上,並可設定副本與負載平衡機制來提升應用的擴展與可靠性。另外 K8s
亦對儲存與網路有多種選擇和支援,可滿足大多數的容器應用需求。市面上介紹K8s
的書或網路文章應該多到數不完了,今天主要是general的帶入K8s
的背景,讓大家了解K8s
的重要性和優點,明天開始就正式開始進入我們的內容囉~
Kubernetes,我要進來囉~
kubernetes (k8s)
What is Kubernetes?
使用 Kubernetes 管理 Docker 之優點與益處
You can find me on